home *** CD-ROM | disk | FTP | other *** search
/ Resource Library: Multimedia / Resource Library: Multimedia.iso / sgml / msdos / sgml07 / etype.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-03-20  |  4.5 KB  |  89 lines

  1. /* ETYPE.H: Definitions for element type and group processing.
  2. */
  3. #define MCHARS    0x80        /* Model: contains #CHARS. */
  4. #define MGI       0x40        /* Model: contains GI names. */
  5. #define MPHRASE   0x20        /* Model: first token is #CHARS. */
  6. #define MKEYWORD  0x1F        /* Model: defined with single keyword. */
  7. #define MNONE     0x10        /* Model: contains no GIs or #CHARS. */
  8. #define MANY      0x08        /* Model: contains any GIs or #CHARS. */
  9. #define MRCDATA   0x04        /* Model: contains RCDATA. */
  10. #define MCDATA    0x02        /* Model: contains CDATA. */
  11.  
  12. #define TOREP (TOPT+TREP)     /* 11000000 Optional and repeatable. */
  13. #define TOPT      0x80        /* Token: 1=optional; 0=required. */
  14. #define TREP      0x40        /* Token: 1=repeatable; 0=not. */
  15. #define TXOREP (TXOPT+TXREP)  /* * explicitly specified */
  16. #define TXOPT     0x20          /* ? explicitly specified */
  17. #define TXREP     0x10          /* + explicitly specified */
  18. #define TTMASK    0x0F        /* 00001111 Mask for testing token type. */
  19. #define TTETD        4        /* 00000100 Token is an ETD. */
  20. #define TTAND        3        /* 00000011 Token is an AND group. */
  21. #define TTSEQ        2        /* 00000010 Token is a sequence group. */
  22. #define TTOR         1        /* 00000001 Token is an OR group. */
  23. #define TTCHARS      0        /* 00000000 Token is #CHARS. */
  24.  
  25. struct thdr {                 /* Token header or model header. */
  26.      UNCH ttype;              /* Token type attributes or model content. */
  27.      union {
  28.           int tnum;           /* Group token or ghdr: tokens in group. */
  29.           struct etd *thetd;  /* GI token: ptr to etd. */
  30.      } tu;
  31. };
  32. #define THSZ (sizeof(struct thdr))
  33.  
  34. #define ETDHASH   211          /* Size of element hash table. Must be prime. */
  35. #define SMO       0x40        /* ETDMIN: Start-tag O minimization. */
  36. #define EMO       0x04        /* ETDMIN: End-tag O minimization. */
  37. #define ETDDCL    0x80        /* ETDMIN: Element was declared. */
  38. #define ETDUSED   0x20        /* ETDMIN: Element used in another declaration. */
  39. #define ETDOCC    0x10        /* ETDMIN: Element occurred in document. */
  40.  
  41. struct etd {                  /* Element type definition. */
  42.      struct etd *etdnext;     /* Next element type definition in hash chain. */
  43.      UNCH *etdgi;          /* GI preceded by its length, followed by EOS. */
  44.      UNCH etdmin;             /* Flag bits: minimization. */
  45.      UNCH mark;              /* Mark bit: for ambiguity checking */
  46.      struct thdr *etdmod;     /* Content model. */
  47.      struct etd **etdmex;     /* Minus exceptions. */
  48.      struct etd **etdpex;     /* Plus exceptions. */
  49.      struct ad *adl;          /* Attribute descriptor list. */
  50.      struct entity **etdsrm;  /* Short reference map. */
  51. };
  52. #define ETDSZ (sizeof(struct etd))
  53. typedef struct etd *PETD;
  54. extern struct etd dumetd[];
  55.  
  56. /* Number of bits in a long must be >= 1<<LONGPOW */
  57. #define LONGPOW 5
  58.  
  59. #define LONGBITS (1<<LONGPOW)
  60.  
  61. struct mpos {                 /* Position of current element in model. */
  62.      UNCH g;                  /* Index of this group in the model. */
  63.      UNCH t;                  /* Index of the current token in this group. */
  64.      unsigned long *h;          /* Hit bits of this group's tokens. */
  65. };
  66.  
  67. #define HITCLEAR(h) MEMZERO((UNIV)(h), grplongs*sizeof(unsigned long))
  68.  
  69. #define TAGCONER  0x01        /* 00000001 (contersw) Tag was out of context. */
  70. #define TAGNET    0x02        /* 00000010 (etisw)    Tag has NET enabled. */
  71. #define TAGPEX    0x04        /* 00000100 (pexsw)    Tag was plus exception. */
  72. #define TAGREF    0x08        /* 00001000 (conrefsw) Tag had CONREF or EMPTY.*/
  73. struct tag {                  /* Tag control block. */
  74.      UNCH   status;           /* Status of context check. */
  75.      UNCH   tflags;           /* Flags: TAGCONER TAGNET TAGPEX TAGREF */
  76.      struct etd *tetd;        /* Element type definition for tag. */
  77.      struct entity **tsrm;    /* Current short reference map. */
  78.      struct mpos *tpos;       /* Position of next tag in this model. */
  79. };
  80.  
  81. #define RCEND    1            /* No more tokens: end element and retry GI. */
  82. #define RCREQ    2            /* Required GI must precede proposed GI. */
  83. #define RCMISS   3            /* GI invalid: not element end; no required GI. */
  84. #define RCHIT    4            /* GI is the one expected next. */
  85. #define RCMEX    5            /* GI invalid: minus exception. */
  86. #define RCHITMEX 6            /* RCMEX with invalid attempted minus exclusion.*/
  87. #define RCPEX    7            /* GI is valid solely because of plus exclusion.*/
  88. #define RCNREQ   8            /* Token is not required; can retry invalid GI. */
  89.